package nfse;

//package nfs.e;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

/**
 * Classe NFSe - ResponsÃ¡vel por montar o fluxo xml e enviar para o
 * web-services.
 *
 * @author (Henrique Santos)
 * @version (29/12/2011)
 */
public final class NFSe {
    // inicializar variÃ¡veis
    // RecepcionarLoteRps
    // servico_enviar_lote_rps_envio.xsd

    Document no;
    // servico_enviar_lote_rps_resposta.xsd
    /*
     * EnviarLoteRpsResposta
     *
     * // ConsultarSituacaoLoteRps //
     * servico_consultar_situacao_lote_rps_envio.xsd
     * ConsultarSituacaoLoteRpsEnvio //
     * servico_consultar_situacao_lote_rps_resposta.xsd
     * ConsultarSituacaoLoteRpsResposta
     *
     * // ConsultarNfsePorRps, // servico_consultar_nfse_rps_envio.xsd
     * ConsultarNfseRpsEnvio // servico_consultar_nfse_rps_resposta.xsd
     * ConsultarNfseRpsResposta
     *
     * // ConsultarNfse // servico_consultar_nfse_envio.xsd ConsultarNfseEnvio
     * // servico_consultar_nfse_resposta.xsd ConsultarNfseResposta
     *
     * // ConsultarLoteRps // servico_consultar_lote_rps_envio.xsd -
     * ConsultarLoteRpsEnvio // servico_consultar_lote_rps_resposta.xsd
     * ConsultarLoteRpsResposta
     *
     * // CancelarNfse // servico_cancelar_nfse_envio.xsd - CancelarNfseEnvio
     * // servico_cancelar_nfse_resposta.xsd CancelarNfseResposta
     */

    /**
     * Construtor para os objetos da classe NFSe
     */
    public NFSe() {
        //EnviarLoteRpsEnvio();
    }

    /**
     * Classe Main()
     */
    public static void main(String[] args) {
        NFSe nfSe = new NFSe();
        nfSe.EnviarLoteRpsEnvio();
    }

    /**
     * Nome do arquivo XSD: servico_enviar_lote_rps_envio.xsd Ocorrencia 1-1
     */
    public void EnviarLoteRpsEnvio() {
        try {

            Le();

            // Nó pai
            no = Novo();


            //no.createAttribute( "EnviarLoteRpsEnvio" );
            Element eTag = no.createElement("e");//getDocumentElement();//Element("e");
            //eTag.setIdAttribute("xmlns", true);
            eTag.setAttribute("xmlns", "http://www.betha.com.br/e-nota-contribuinte-ws");
            // e:EnviarLoteRpsEnvio xmlns:e="http://www.betha.com.br/e-nota-contribuinte-ws">
            
            // adicionando mais parÃ¡grafos em 'body'
            Element p1Tag = no.createElement("LoteRPS");//
            //eTag.insertBefore(new NodeImpl(), eTag)

            p1Tag.setAttribute("Id", "L105");

            Element nLote = no.createElement("NumeroLote");
            nLote.setTextContent("105");

            Element cNpj = no.createElement("Cnpj");
            cNpj.setTextContent("02225268000157");
            
            Element inscMunicipal = no.createElement("InscricaoMunicipal");
            inscMunicipal.setTextContent("28500");
            
            Element qtde = no.createElement("QuantidadeRps");
            qtde.setTextContent("1");
            
            p1Tag.appendChild(nLote);
            p1Tag.appendChild(cNpj);
            p1Tag.appendChild(inscMunicipal);
            p1Tag.appendChild(qtde);
            /*<NumeroLote>105</NumeroLote>
             * <Cnpj>02225268000157</Cnpj>
             * <InscricaoMunicipal>28500</InscricaoMunicipal>
             * <QuantidadeRps>1</QuantidadeRps*/
            //p1Tag.setTextContent("teste");
            //Element bodyTag = ( Element ) htmlTag.getElementsByTagName( "body" ).item(0);
            eTag.appendChild(p1Tag);



            //NodeList nList = no.getElementsByTagName( no.getDocumentElement().getNodeName() );
            System.out.println(no.getClass());//nList.getLength());

            DOMSource domSource = new DOMSource(eTag);
            StreamResult sr = new StreamResult(new File("EnviarLoteRpsEnvio.xml"));
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.transform(domSource, sr);

            String xsd = "servico_enviar_lote_rps_envio.xsd";
            String no = "EnviarLoteRpsEnvio"; //Nome do campo
            int numero = 1;//NÃºmero identificador do campo, quando este contiver subitens

            // NÃ³s Filhos
            TcLoteRps loteRps; // 1-1
            //loteRps = new TcLoteRps();


            Le();
        } catch (DOMException | TransformerFactoryConfigurationError | TransformerException e2) {
            //System.out.println("Erro ao acessar URL: ");
        } catch (SAXException ex) {
            Logger.getLogger(NFSe.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(NFSe.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(NFSe.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Nome do arquivo XSD: servico_enviar_lote_rps_resposta.xsd Ocorrencia 1-1
     */
    public static void EnviarLoteRpsResposta() {
        // Nï¿½ pai
        String xsd = "servico_enviar_lote_rps_resposta.xsd";
        String no = "EnviarLoteRpsResposta"; //Nome do arquivo XSD;
        int numero = 1;//NÃºmero identificador do campo, quando este contiver subitens
        //Fluxo( String numero_, String nome_, String tipo_, String pai_, String ocorrencia_, String observacao_ )
        Fluxo pai = new Fluxo("1", "EnviarLoteRpsResposta", "", "", "1-1", "");

        // NÃ³s Filhos
        TipoSimples numeroLote = new Tipo().Busca("tsNumeroLote");       // 1-1
        String dataRecebimento = "";                                       // 1-1
        TipoSimples protocolo = new Tipo().Busca("tsNumeroProtocolo");  // 1-1
        ListaMensagemRetorno listaMensagemRetorno = new ListaMensagemRetorno();          // 1-1
        //listaMensagemRetorno.mensagemRetorno.codigo.Insere(no);
    }

    public static Document Novo() throws SAXException, ParserConfigurationException, IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dB = factory.newDocumentBuilder();
        /*
         * System.out.println("\n<e:" + no +">"+ "\n</e:"+ no +">");
         */
        return dB.newDocument();/*parse(new InputSource(new StringReader("\n\n<e:" + no + " xmlns:e='http://www.betha.com.br/e-nota-contribuinte-ws'>"
                + "\n</e:" + no + ">")));*/
    }

    public static void Le() {
        try {
            File f = new File("EnviarLoteRpsEnvio.xml");
            byte[] b = new byte[9024];
            int i = 0;
            int bit = 0;
            try (FileInputStream fi = new FileInputStream(f)) {
                while ((i = fi.read(b)) > -1) {
                    //System.out.print(  (char) i );
                    for (int j = 0; j < i; j++) {
                        System.out.print((char) b[j]);
                    }
                }
            }
            System.out.print("\n\n");
        } catch (IOException e) {
        }
    }
}
